<?php
class Antropometrica extends TPage {
 
    public function onLoad($param) {
        parent::onLoad($param);
        if (!$this->IsPostBack) {
            $this->validarSession();
            $this->cargarInterfaz();
        }
    }
    
    private function validarSession(){
        $oUsuario = Util::getSession("Usuario");
        if (Util::isNullOrEmpty($oUsuario)) {
            $this->Response->redirect($this->Service->constructUrl("Home"));
        }
    }
    
    private function cargarInterfaz(){        
        try{
            $oPaciente = $this->obtenerDatosPaciente();
            $this->iniciarControles($oPaciente);
            
        }  catch (Exception $e){
            throw new Exception($e->getMessage());
        }        
    }
    
    private function obtenerDatosPaciente(){
        try{
            $idPaciente = Util::isNull($this->Request["idPaciente"], "-1");                  

            if($idPaciente != "-1"){    
                $oPaciente = new Paciente(); 
                $oPacienteBLL = new PacienteBLL();
                $oPaciente = $oPacienteBLL->obtenerPorId($idPaciente);                

                return $oPaciente;
            }else{                
                $oPaciente = null;
                
                return $oPaciente;
            }
        } catch (Exception $e){
            throw new Exception($e->getMessage());
        }
        
    }
    
    private function iniciarControles($oPaciente){
        $this->txtPeso->Attributes->Add("required","");
        $this->txtTalla->Attributes->Add("required","");
        $this->ddlNivelActividadFisica->Attributes->Add("required","");
        $this->txtCCOmbligo->Attributes->Add("required","");
        $this->AutoComplete->Attributes->Add("placeholder","Buscar paciente por rut o nombre");
        $this->txtTalla->Attributes->Add("onKeyUp","calcularIMC()");
        $this->txtTriceps->Attributes->Add("onFocus","cargarImagenTriceps()");
        $this->txtBiceps->Attributes->Add("onFocus","cargarImagenBiceps()");
        $this->txtSubEscapular->Attributes->Add("onFocus","cargarImagenSubEscapular()");
        $this->txtCrestaIliaca->Attributes->Add("onFocus","cargarImagenCrestaIliaca()");
        $this->txtSupraEspinal->Attributes->Add("onFocus","cargarImagenSupraEspinal()");
        $this->txtAbdominal->Attributes->Add("onFocus","cargarImagenAbdominal()");
        $this->txtMusloAnterior->Attributes->Add("onFocus","cargarImagenMusloAnterior()");
        $this->txtPantorrillaMedial->Attributes->Add("onFocus","cargarImagenPantorrillaMedial()");
        $this->txtPantorrillaMedial->Attributes->Add("onKeyUp","calcularPliegues()");
        $this->txtPectoral->Attributes->Add("onFocus","cargarImagenPectoral()");
        $this->txtCrestaIliaca->Attributes->Add("onKeyUp","calcularPorcentajeGraso()");
        $this->txtPantorrillaMaximo->Attributes->Add("onKeyUp","calcularKgMusculo()");
        $this->ddlNivelActividadFisica->Attributes->Add("onChange","calcularGastoEnergeticoTotalEstimado()");
        $this->txtPorcentajeGrasoDeseado->Attributes->Add("onKeyUp","calcularPesoIdeal()");
   
        try{
            if(count($oPaciente) != null){
                $this->pnlControlesEvaluacion->Visible = true;
                $this->pnlMensajeSinPaciente->Visible = false;
                
                $edad = Util::calcularEdadDecimal($oPaciente->getFechaNacimiento());
                
                $this->imgPaciente->ImageUrl = $oPaciente->getImagen();
                $this->edadDecimal->Value = $edad;
                $this->idPaciente->Value = $oPaciente->getId();
                if($oPaciente->getSexo() == "Masculino"){
                    $this->sexoPaciente->Value = 1;
                    $arrActividades = array(
                        array('value'=>'','name'=>''),
                        array('value'=>'1.3','name'=>'Sedentario'),
                        array('value'=>'1.6','name'=>'Liviano'),
                        array('value'=>'1.7','name'=>'Moderado'),
                        array('value'=>'2.1','name'=>'Fuerte'),
                        array('value'=>'2.4','name'=>'Extremo'));
                    $this->ddlNivelActividadFisica->DataSource = $arrActividades;
                    $this->ddlNivelActividadFisica->dataBind();
                }else if($oPaciente->getSexo() == "Femenino"){
                    $this->sexoPaciente->Value = 0;
                    $arrActividades = array(
                        array('value'=>'','name'=>''),
                        array('value'=>'1.3','name'=>'Sedentario'),
                        array('value'=>'1.5','name'=>'Liviano'),
                        array('value'=>'1.6','name'=>'Moderado'),
                        array('value'=>'1.9','name'=>'Fuerte'),
                        array('value'=>'2.2','name'=>'Extremo'));
                    $this->ddlNivelActividadFisica->DataSource = $arrActividades;
                    $this->ddlNivelActividadFisica->dataBind();
                }                
                $this->lblNombreApellido->Text = $oPaciente->getNombre() .' '. $oPaciente->getApellido();
            }else{
                $this->pnlControlesEvaluacion->Visible = false;
                $this->pnlMensajeSinPaciente->Visible = true;
                $this->litMensajeSinPaciente->Text = "Para registrar una evaluaci&oacute;n debe seleccionar un paciente <a href='?page=Paciente.Listar' style='color: #ff0;'>AQU&Iacute;</a> o en el buscador superior.";
                $this->btnAgregar->Attributes->Add("disabled","disabled");
                $this->litMensajeBoton->Text = "El bot&oacute;n de registro est&aacute; desactivado, debe seleccionar un paciente.";
                $this->lblNombreApellido->Text = "";
                $this->litAlert->Text = Util::setMensajeUsuario("Para registrar una evaluaci&oacute;n debe seleccionar un paciente <a href='?page=Paciente.Listar'>AQU&Iacute;</a> o en el buscador.", Util::MENSAJE_INFO);
            }        
            
        }catch(Exception $e){
            $this->litAlert->Text = Util::setMensajeUsuario("Lo sentimos, se ha producido un error al cargar la p&aacute;gina.", Util::MENSAJE_ERROR);
        }
    }
    
    public function btnRegistrarEvaluacionOnClick($sender, $param){
        try{
            $oEvaluacion = new EvaluacionAntropometrica();

            $oEvaluacion->setFecha(Util::fechaNormalADateTime(Util::getFechaHoraActual()));
            $oEvaluacion->setPeso($this->txtPeso->Text);
            $oEvaluacion->setTalla($this->txtTalla->Text);
            $oEvaluacion->setCcombligo($this->txtCCOmbligo->Text);
            $oEvaluacion->setActividadFisica($this->ddlNivelActividadFisica->Text);
            $oEvaluacion->setImc($this->resultadoIMC->Value);
            $oEvaluacion->setPuntuacionZImc($this->resultadoPuntuacionZIMC->Value);
            $oEvaluacion->setPercentilImc($this->resultadoPercentilIMC->Value);
            $oEvaluacion->setVerbalImc($this->resultadoVerbalIMC->Value);
            $oEvaluacion->setTriceps($this->txtTriceps->Text);
            $oEvaluacion->setBiceps($this->txtBiceps->Text);
            $oEvaluacion->setSubEscapular($this->txtSubEscapular->Text);
            $oEvaluacion->setCrestaIliaca($this->txtCrestaIliaca->Text);
            $oEvaluacion->setSupraEspinal($this->txtSupraEspinal->Text);
            $oEvaluacion->setAbdominal($this->txtAbdominal->Text);
            $oEvaluacion->setMusloAnterior($this->txtMusloAnterior->Text);
            $oEvaluacion->setPantorrillaMedial($this->txtPantorrillaMedial->Text);
            $oEvaluacion->setPectoral($this->txtPectoral->Text);
            $oEvaluacion->setPliegues($this->resultadoSumaPliegues->Value);
            $oEvaluacion->setPuntuacionZPliegues($this->resultadoPuntuacionZPliegues->Value);
            $oEvaluacion->setPercentiloPliegues($this->resultadoPercentilPliegues->Value);
            $oEvaluacion->setVerbalPliegues($this->resultadoVerbalPliegues->Value);
            $oEvaluacion->setPorcentajeGraso($this->resultadoPorcentajeGraso->Value);
            $oEvaluacion->setKgGrasa($this->resultadoKgGrasa->Value);
            $oEvaluacion->setKgGrasaMagra($this->resultadoKgGrasaMagra->Value);
            $oEvaluacion->setPuntuacionZGrasa($this->resultadoPuntuacionZGrasaCorporal->Value);
            $oEvaluacion->setPercentiloGrasa($this->resultadoPercentilGrasaCorporal->Value);
            $oEvaluacion->setVerbalGrasa($this->resultadoVerbalGrasaCorporal->Value);
            $oEvaluacion->setBrazoRelajado($this->txtBrazoRelajado->Text);
            $oEvaluacion->setBrazoFlexionado($this->txtBrazoFlexionado->Text);        
            $oEvaluacion->setCinturaMinima($this->txtCinturaMinima->Text);
            $oEvaluacion->setCaderasMaximo($this->txtCaderasMaximo->Text);
            $oEvaluacion->setMusloMedial($this->txtMusloMedial->Text);
            $oEvaluacion->setPantorrillaMaximo($this->txtPantorrillaMaximo->Text);
            $oEvaluacion->setKgMusculo($this->resultadoKgMusculo->Value);        
            $oEvaluacion->setPorcentajeMusculo($this->resultadoPorcentajeMusculo->Value);
            $oEvaluacion->setPuntuacionZMusculo($this->resultadoPuntuacionZMusculo->Value);
            $oEvaluacion->setPercentiloMusculo($this->resultadoPercentilMusculo->Value);
            $oEvaluacion->setVerbalMusculo($this->resultadoVerbalMusculo->Value);
            $oEvaluacion->setPorcentajeGrasoDeseado($this->txtPorcentajeGrasoDeseado->Text ." %");
            $oEvaluacion->setPesoIdeal($this->resultadoPesoIdeal->Value);
            $oEvaluacion->setPesoDisminuir($this->resultadoPesoDisminuir->Value);
            $oEvaluacion->setGastoEnergetico($this->resultadoGastoEnergetico->Value);
            $oEvaluacion->setGastoEnergeticoTotal($this->resultadoGastoEnergeticoTotalEstimado->value);
            $oEvaluacion->setComentario($this->txtComentario->Text);
            $oEvaluacion->setIdPaciente($this->idPaciente->Value);

            $oEvaluacionBLL = new EvaluacionAntropometricaBLL();
            $id = $oEvaluacionBLL->grabar($oEvaluacion);

            if(is_int($id) && $id > 0){
                try{                    
                    $oEvaluacionHistorial = new HistorialEvaluaciones();
                    
                    //obtengo ultima evaluacion para calcular diferencias entre valores
                    $oUltimaEvaluacionBLL = new HistorialEvaluacionesBLL();
                    $oUltimaEvaluacion = $oUltimaEvaluacionBLL->obtenerUltimaEvaluacion($this->idPaciente->Value);
                    
                    $oEvaluacionHistorial->setNumeroEvaluacion($oUltimaEvaluacion->getNumeroEvaluacion() + 1);
                    $oEvaluacionHistorial->setFechaEvaluacion(Util::fechaNormalADateTime(Util::getFechaHoraActual()));
                    $oEvaluacionHistorial->setPeso($this->txtPeso->Text);
                    if($oUltimaEvaluacion->getNumeroEvaluacion() == 0){
                        $oEvaluacionHistorial->setDiferenciaPeso(0);
                        $oEvaluacionHistorial->setDiferenciaCintura(0);
                        $oEvaluacionHistorial->setDiferenciaCOmbligo(0);
                    }else{
                        $oEvaluacionHistorial->setDiferenciaPeso($oUltimaEvaluacion->getPeso() - $this->txtPeso->Text);
                        $oEvaluacionHistorial->setDiferenciaCintura($oUltimaEvaluacion->getCintura() - $this->txtCinturaMinima->Text);
                        $oEvaluacionHistorial->setDiferenciaCOmbligo($oUltimaEvaluacion->getCCOmbligo() - $this->txtCCOmbligo->Text);
                    }
                    $oEvaluacionHistorial->setCintura($this->txtCinturaMinima->Text);
                    $oEvaluacionHistorial->setCCOmbligo($this->txtCCOmbligo->Text);
                    $oEvaluacionHistorial->setIdPaciente($this->idPaciente->Value);
                    
                    $oEvaluacionHistorialBLL = new HistorialEvaluacionesBLL();
                    $idHistorial = $oEvaluacionHistorialBLL->grabar($oEvaluacionHistorial);
                    
                    if(is_int($idHistorial) && $idHistorial > 0){
                        $this->litAlert->Text = Util::setMensajeUsuario("La evaluaci&oacute;n se ha registrado exitosamente.", Util::MENSAJE_OK);
                        $this->limpiarForm();
                    }else{
                        $oEvaluacionHistorialBLL->eliminar($idHistorial);
                        $this->litAlert->Text = Util::setMensajeUsuario("Se ha producido un error el registrar la evaluaci&oacute;n, por favor vuelva a intentarlo.", Util::MENSAJE_ERROR);
                    }
                    
                } catch (Exception $e){
                    $oEvaluacionBLL->eliminar($id);
                    $oEvaluacionHistorialBLL->eliminar($idHistorial);
                    throw new Exception($e->getMessage());
                }
            }else{
                $oEvaluacionBLL->eliminar($id);
                $oEvaluacionHistorialBLL->eliminar($idHistorial);
                $this->litAlert->Text = Util::setMensajeUsuario("Se ha producido un error el registrar la evaluaci&oacute;n, por favor vuelva a intentarlo.", Util::MENSAJE_ERROR);
            }
        }catch(Exception $e){
            $oEvaluacionBLL->eliminar($id);
            $oEvaluacionHistorialBLL->eliminar($idHistorial);
            throw new Exception($e->getMessage());
        }
    }
    
    private function limpiarForm(){
        $this->txtPeso->Text = "";
        $this->txtTalla->Text = "";
        $this->txtCCOmbligo->Text = "";
        $this->ddlNivelActividadFisica->Text = "";
        $this->resultadoIMC->Value = "";
        $this->resultadoPuntuacionZIMC->Value = "";
        $this->resultadoPercentilIMC->Value = "";
        $this->resultadoVerbalIMC->Value = "";
        $this->txtTriceps->Text = "";
        $this->txtBiceps->Text = "";
        $this->txtSubEscapular->Text = "";
        $this->txtCrestaIliaca->Text = "";
        $this->txtSupraEspinal->Text = "";
        $this->txtAbdominal->Text = "";
        $this->txtMusloAnterior->Text = "";
        $this->txtPantorrillaMedial->Text = "";
        $this->txtPectoral->Text = "";
        $this->resultadoSumaPliegues->Value = "";
        $this->resultadoPuntuacionZPliegues->Value = "";
        $this->resultadoPercentilPliegues->Value = "";
        $this->resultadoVerbalPliegues->Value = "";
        $this->resultadoPorcentajeGraso->Value = "";
        $this->resultadoKgGrasa->Value = "";
        $this->resultadoKgGrasaMagra->Value = "";
        $this->resultadoPuntuacionZGrasaCorporal->Value = "";
        $this->resultadoPercentilGrasaCorporal->Value = "";
        $this->resultadoVerbalGrasaCorporal->Value = "";
        $this->txtBrazoRelajado->Text = "";
        $this->txtBrazoFlexionado->Text = "";        
        $this->txtCinturaMinima->Text = "";
        $this->txtCaderasMaximo->Text = "";
        $this->txtMusloMedial->Text = "";
        $this->txtPantorrillaMaximo->Text = "";
        $this->resultadoKgMusculo->Value = "";        
        $this->resultadoPorcentajeMusculo->Value = "";
        $this->resultadoPuntuacionZMusculo->Value = "";
        $this->resultadoPercentilMusculo->Value = "";
        $this->resultadoVerbalMusculo->Value = "";
        $this->txtPorcentajeGrasoDeseado->Text = "";
        $this->resultadoPesoIdeal->Value = "";
        $this->resultadoPesoDisminuir->Value = "";
        $this->resultadoGastoEnergetico->Value = "";
        $this->resultadoGastoEnergeticoTotalEstimado->value = "";
        $this->txtComentario->Value = "";
        $this->idPaciente->Value = "";
    }        
    
    public function buscarPacientes($sender,$param) {        
        $consulta = $param->getToken();
        
        $oPacienteBLL = new PacienteBLL();
        
        $arrPacientes = $oPacienteBLL->obtenerPorBusqueda($consulta);
        $listaPacientes = array();
                
        foreach ($arrPacientes as $row){
            $paciente = array('id' => $row->getId(), 'paciente' => $row->getNombre());
            $listaPacientes[] = $paciente;
        }

        $this->AutoComplete->DataSource = $listaPacientes;
        $this->AutoComplete->dataBind();
    }
    
    public function pacienteSeleccionado($sender,$param){              
        $id = $sender->Suggestions->DataKeys[ $param->selectedIndex ];
        
        if($id > 0){
            Util::setSession("Paciente", $id);
            $this->Response->redirect("index.php?page=Evaluacion.Antropometrica&idPaciente=" . $id);
        }else{
            $this->Response->redirect("index.php?page=Paciente.Listar");
        }        
    }
}
?>
